package com.syf.mappers;

import com.syf.domain.User;
import com.syf.dto.UserDto;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 1.用来做对象的映射转化: 【属性相互 赋值】
 *      entity2Dto
 *      Dto2Entity
 * 2.Dto: 数据传送对象（传输数据时用其来封装对象）
 *
 * 3.查询出的user数据字段多，而userDto字段少，及传输的数据也少
 *   传输user对象还不如传输userDto对象来得划算，也及 解决数据传输量问题
 *
 */
@Mapper(componentModel = "spring")  // org.mapstruct.Mapper,  容器的Model: 到时候会生成一个spring注解放在容器里边
public interface UserDtoMapper {

     // 获取该对象的实例
     UserDtoMapper INSTANCE =  Mappers.getMapper(UserDtoMapper.class) ;

    /**
     * 将entity转化为dto(传输数据时用其来封装对象)
     * @param source
     * @return
     */
    UserDto convert2Dto(User source) ; //方名可以随便写(主要是参数与返回值类型)
    /*
    public UserDto toConvertDto(User source) {
        if (source == null) {
            return null;
        } else {
            UserDto userDto = new UserDto();
            userDto.setId(source.getId());
            userDto.setUsername(source.getUsername());
            userDto.setCountryCode(source.getCountryCode());
            userDto.setMobile(source.getMobile());
            userDto.setEmail(source.getEmail());
            userDto.setRealName(source.getRealName());
            return userDto;
         }
    }
     */

    /**
     * 将dto对象转化为entity对象
     * @param source
     * @return
     */
    User convert2Entity(UserDto source) ;


    /**
     * 将entity转化为dto
     * @param source
     * @return
     */
    List<UserDto> convert2Dto(List<User> source) ;


    /**
     * 将dto对象转化为entity对象
     * @param source
     * @return
     */
    List<User> convert2Entity(List<UserDto> source) ;
    /*
    public List<User> toConvertEntity(List<UserDto> source) {
        if (source == null) {
            return null;
        } else {
            List<User> list = new ArrayList(source.size());
            Iterator var3 = source.iterator();
            while(var3.hasNext()) {
                UserDto userDto = (UserDto)var3.next();
                list.add(this.toConvertEntity(userDto));
            }
            return list;
        }
    }
     */
}
